﻿#define _CRT_SECURE_NO_WARNINGS
// ↑ 将本行在代码放在第一行可以避免 scanf的报错问题（仅在VS编译器里）
//【初阶篇】64.作业_数组

#include<stdio.h>

// 2.1实现初始化函数init() 全为零 
void init(int arr[],int l,int r)
{
	arr[l] = 0;
	l++;
	if (l <= r)
		init(arr, l, r);
}

// 2.2实现print()打印每个元素 
void print(int arr[], int l, int r)
{
	printf("%d ", arr[l]);
	l++;
	if (l <= r)
		print(arr, l, r);
}

// 2.3实现reverse() 逆置数组
void reverse(int arr[], int l, int r)
{
	int tmp = arr[l];
	arr[l] = arr[r];
	arr[r] = tmp;
	l++;
	r--;
	if (l <r)
		reverse(arr, l, r);
}

void scan(int arr[], int l, int r)
{
	printf("设置下标[%d]的元素:>");
	scanf("%d", &arr[l]);
	l++;
	if (l <= r)
		scan(arr, l, r);
}


int main()
{
	//作业1 交换数组
	printf("作业1 交换数组\n");

	int arr1[] = { 1,3,5,7,9 };
	int arr2[] = { 2,4,6,8,10 };
	
	int* p = &arr1[0];
	int i = 0;
	int sz0 = sizeof(arr1) / sizeof(arr1[0]);
	for (i = 0; i < sz0; i++)
	{
		int tmp = arr1[i];
		arr1[i] = arr2[i];
		arr2[i] = tmp;
	}
	for (i = 0; i < sz0; i++)
	{
		printf("%d ", arr1[i]);
	}
	printf("\n");
	for (i = 0; i < sz0; i++)
	{
		printf("%d ", arr2[i]);
	}
	printf("\n");

	//作业2 创建一个整形数组利用自定义函数实现各种功能
	// 2.1实现print()打印每个元素 
	// 2.2实现reverse() 逆置数组
	// 2.3实现初始化函数init() 全为零 

	printf("作业2 创建一个整形数组\n利用自定义函数实现各种功能\n");

	int arr[] = {1,2,3,4,5,6,7,8};
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = sz - 1;
	printf("【2.1 打印数组】\n");
	print(arr,left,right);
	printf("\n\n");
	printf("【2.2 逆置数组】\n");
	reverse(arr, left, right);
	print(arr, left, right);
	printf("\n\n");
	printf("【2.3 初始化数组】\n");
	init(arr, left, right);
	print(arr, left, right);
	printf("\n\n");
	printf("【2.4 输入数组元素】\n");
	scan(arr, left, right);
	print(arr, left, right);
	printf("\n");


	

















	return 0;
}